home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / CONTROLLOOP.s < prev    next >
Text File  |  1995-09-14  |  46KB  |  2,348 lines

  1. ; Main control loop.
  2. ; This is the very outer loop of the program.
  3.  
  4. ; What needs to be done and when?
  5.  
  6. ; Black screen start.
  7. ; Load title music
  8. ; Load title screen
  9. ; Fade up title screen
  10. ; Select options
  11. ; Play game.
  12.  
  13. ; Playing the game involves allocating screen and
  14. ; level memory, loading the level, loading the
  15. ; samples, loading the wall graphics, playing the
  16. ; level, deallocating the screen memory....
  17.  
  18. ; Control part should therefore:
  19.  
  20. ; 1. Load Title Music
  21. ; 2. Load title screen
  22. ; 3. Fade up title screen.
  23. ; 4. Add 'loading' message
  24. ; 5. Load samples and walls
  25. ; 6: LOOP START
  26. ; 7. Option select screens
  27. ; 8. Free music mem, allocate level mem.
  28. ; 9. Load level
  29. ;10. Play level with options selected
  30. ;11. Reload title music
  31. ;12. Reload title screen
  32. ;13. goto 6
  33.  
  34. INTROTUNEADDR: dc.l 0
  35. INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
  36.  even
  37. TITLESCRNADDR: dc.l 0
  38. TITLESCRNNAME: dc.b 'AB3D1:includes/titlescrnraw',0
  39.  even
  40. TITLESCRNNAME2: dc.b 'AB3D2:includes/titlescrnraw',0
  41.  even
  42. OPTSPRADDR: dc.l 0
  43.  
  44.  
  45. KVALTOASC:
  46.         Dc.b    " `  "," 1  "," 2  "," 3  "
  47.         dc.b    " 4  "," 5  "," 6  "," 7  "
  48.         dc.b    " 8  "," 9  "
  49.         Dc.b    " 0  "," -  "," +  "," \  "
  50.         dc.b     '    ','    '," Q  "," W  "
  51.         dc.b    " E  "," R  "
  52.         Dc.b    " T  "," Y  "," U  "," I  "
  53.         dc.b    " O  "," P  "," [  "," ]  "
  54.         dc.b    '    ','KP1 '
  55.         Dc.b    'KP2 ','KP3 '," A  "," S  "
  56.         dc.b    " D  "," F  "," G  "," H  "
  57.         dc.b    " J  "," K  "
  58.         Dc.b    " L  "," ;  "," #  ",'    '
  59.         dc.b    '    ','KP4 ','KP5 ','KP6 '
  60.         dc.b    '    '," Z  "
  61.         Dc.b    " X  "," C  "," V  "," B  "
  62.         dc.b    " N  "," M  "," ,  "," .  "
  63.         dc.b     " /  ",'    '
  64.         Dc.b    '    ','KP7 ','KP8 ','KP9 '
  65.         dc.b    'SPC ','<-- ','TAB ','ENT '
  66.         dc.b    'RTN ','ESC '
  67.         Dc.b    'DEL ','    ','    ','    '
  68.         dc.b    'KP- ','    ','UCK ','DCK '
  69.         dc.b    'RCK ','LCK '
  70.         Dc.b    'FK1 ','FK2 ','FK3 ','FK4 '
  71.         dc.b    'FK5 ','FK6 ','FK7 ','FK8 '
  72.         dc.b    'FK9 ','FK0 '
  73.         Dc.b    'KP( ','KP) ','KP/ ','KP* '
  74.         dc.b    'KP+ '
  75.         dc.b    'HLP ','LSH ','RSH '
  76.         dc.b    'CPL ','CTL '
  77.         Dc.b    'LAL ','RAL ','LAM ','RAM '
  78.         dc.b    '    ','    ','    ','    '
  79.         dc.b    '    ','    '
  80.         Dc.b    '    ','    ','    ','    '
  81.         dc.b    '    ','    ','    ','    '
  82.         dc.b    '    ','    '
  83.  
  84.  even
  85.  
  86. FINISHEDLEVEL: dc.w 0
  87.  
  88.  
  89. START:
  90.  
  91.  move.b #'n',mors
  92.  
  93. ************************************88
  94. * TAKE OUT WHEN PLAYING MODULE AGAIN
  95. ********************************
  96.     PRSDF
  97.     PRSDE
  98. ************************************
  99.  
  100. ; move.l #PROTCALLENC,a0
  101. ; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
  102. ; move.l #$75055345,d0
  103. ;codeitup:
  104. ; sub.l d0,(a0)+
  105. ; ror.l #1,d0
  106. ; dbra d1,codeitup
  107. ;
  108. ; rts
  109.  
  110.  PRSDA
  111.  
  112.  move.w #$7201,titleplanes
  113.  
  114.  move.l 4.w,a6
  115.  move.l #doslibname,a1
  116.  moveq #0,d0
  117.  jsr -552(a6)
  118.  move.l d0,doslib
  119.  PRSDS
  120.  jsr stuff
  121.  
  122.  jsr _InitLowLevel
  123.  
  124.  jsr CLEARTITLEPAL
  125.  
  126.  PRSDT
  127.  
  128.  move.w #$20,$dff1dc
  129.  move.l #titlecop,$dff080
  130.  PRSDV
  131.  move.w #$87c0,$dff000+dmacon
  132.  move.w #$8020,$dff000+dmacon
  133.  move.w $dff006,d0
  134.  add.w d0,RVAL2 
  135.  
  136.  bsr GETTITLEMEM
  137.  PRSDU
  138.  bsr CLROPTSCRN
  139.  
  140.  bsr SETUPTITLESCRN
  141.  
  142. ; jsr _InitPlayer
  143.  
  144. ; move.l #INTROTUNENAME,a0
  145. ; jsr _LoadModule
  146. ; move.l d0,INTROTUNEADDR
  147.  PRSDY
  148. ; move.l d0,a0
  149. ; jsr _InitModule
  150.  
  151. ; move.l INTROTUNEADDR,a0
  152. ; jsr _PlayModule
  153.  PRSDa
  154.  bsr LOADTITLESCRN
  155.  
  156.  move.w #0,FADEVAL
  157.  move.w #63,FADEAMOUNT
  158.  bsr FADEUPTITLE
  159.  PRSDB
  160.  jsr LOADWALLS
  161.  jsr LOADFLOOR
  162.  jsr LOADOBS
  163.  PRSDZ
  164.  
  165.  move.w #31,FADEAMOUNT
  166.  PRSDC
  167.  bsr FADEDOWNTITLE 
  168.  
  169.  IFEQ CD32VER 
  170.  bsr ASKFORDISK
  171.  ENDC
  172.  IFNE CD32VER
  173.  PRSDD
  174.  ENDC
  175.  
  176.  jsr LOAD_SFX
  177. ; jsr _StopPlayer
  178.  PRSDW
  179.  PRSDX
  180. ; jsr _RemPlayer
  181.  
  182.  
  183.  IFNE CD32VER
  184.  move.l doslib,a6
  185.  move.l #115,d1
  186.  jsr -198(a6)
  187.  ENDC
  188.  
  189. ; move.l #newblag,$80
  190. ; trap #0
  191. ; bra JUMPPASTIT
  192. ; rts
  193. ;
  194. ;newblag:
  195.  
  196.  CACHE_ON d2
  197.  CACHE_FREEZE_OFF d2
  198.  DATA_CACHE_CLEAR d2
  199.  DATA_CACHE_OFF d2
  200. ; bsr PROTSETUP
  201.  
  202. ; move.l INTROTUNEADDR,a0
  203. ; jsr _UnLoadModule
  204.  
  205.  IFEQ CD32VER
  206.  jsr KInt_Init
  207.  ENDC
  208.  bsr DEFAULTGAME
  209. ; rte
  210. ;
  211. ;JUMPPASTIT:
  212. BACKTOMENU:
  213.  
  214.  cmp.b #'s',mors
  215.  beq.s BACKTOSLAVE
  216.  cmp.b #'m',mors
  217.  beq.s BACKTOMASTER
  218.  bsr READMAINMENU
  219.  bra DONEMENU
  220. BACKTOMASTER:
  221.  bsr MASTERMENU
  222.  bra DONEMENU
  223. BACKTOSLAVE:
  224.  bsr SLAVEMENU
  225. DONEMENU:
  226.  
  227.  bsr WAITREL
  228.  
  229.  IFEQ CD32VER
  230.  move.l OLDKINT,$68.w
  231.  ENDC
  232.  
  233.  bsr CLRSPRITES
  234.  
  235.  move.w #31,FADEAMOUNT
  236.  bsr FADEUPTITLE
  237.  move.w #63,FADEAMOUNT
  238.  bsr FADEDOWNTITLE
  239.  
  240.  move.w #$0201,titleplanes
  241.  
  242.  bsr RELEASETITLEMEM
  243.   
  244.  jsr LOADBOTPIC
  245.   
  246.  clr.b FINISHEDLEVEL
  247.  
  248.  move.w #0,PLR1_angpos
  249.  move.w #0,PLR2_angpos
  250.  move.b #0,PLR1_GunSelected
  251.  move.b #0,PLR2_GunSelected
  252.  
  253. **************************8
  254.  clr.b NASTY
  255. *************************** 
  256.  jsr PLAYTHEGAME
  257.  
  258.  bsr FREEBOTMEM 
  259.  
  260. ; bra QUITTT
  261.  
  262.  tst.b FINISHEDLEVEL
  263.  beq dontusestats
  264.  bsr CALCPASSWORD
  265. dontusestats:
  266.  bsr PASSLINETOGAME
  267.  bsr GETSTATS
  268.  
  269.  bsr GETTITLEMEM
  270.  bsr CLROPTSCRN
  271.  bsr SETUPTITLESCRN
  272.  
  273.  bsr LOADTITLESCRN2
  274.  move.w #$7201,titleplanes
  275.  
  276.  move.w #$20,$dff1dc
  277.  move.l #titlecop,$dff080
  278.  move.w #$87c0,$dff000+dmacon
  279.  move.w #$8020,$dff000+dmacon 
  280.  
  281.  move.w #0,FADEVAL
  282.  move.w #63,FADEAMOUNT
  283.  bsr FADEUPTITLE
  284.  
  285.  move.w #31,FADEAMOUNT
  286.  bsr FADEDOWNTITLE 
  287.  
  288.  jsr KInt_Init
  289.  bra BACKTOMENU
  290.  
  291. QUITTT:
  292.  
  293.  move.l LEVELDATA,d1
  294.  move.l d1,a1
  295.  move.l #120000,d0
  296.  move.l 4.w,a6
  297.  jsr -210(a6)
  298.  
  299.  move.l TEXTSCRN,d1
  300.  move.l d1,a1
  301.  move.l #10240*2,d0
  302.  move.l 4.w,a6
  303.  jsr -210(a6)
  304.  
  305.  jsr RELEASEWALLMEM
  306.  jsr RELEASESAMPMEM
  307.  jsr RELEASEFLOORMEM
  308.  jsr RELEASEOBJMEM
  309.   
  310.  rte
  311.  
  312. ; KEY OPTIONS:
  313. CONTROLBUFFER:
  314. turn_left_key:
  315.  dc.b $4f
  316. turn_right_key:
  317.  dc.b $4e
  318. forward_key:
  319.  dc.b $4c
  320. backward_key:
  321.  dc.b $4d
  322. fire_key:
  323.  dc.b $65
  324. operate_key:
  325.  dc.b $40
  326. run_key:
  327.  dc.b $61
  328. force_sidestep_key:
  329.  dc.b $67
  330. sidestep_left_key:
  331.  dc.b $39
  332. sidestep_right_key:
  333.  dc.b $3a
  334. duck_key:
  335.  dc.b $22
  336. look_behind_key:
  337.  dc.b $28
  338.  
  339. templeftkey: dc.b 0
  340. temprightkey: dc.b 0
  341. tempslkey: dc.b 0 
  342. tempsrkey: dc.b 0
  343.  
  344.  even 
  345.  
  346. GETSTATS:
  347. ; CHANGE PASSWORD INTO RAW DATA
  348.  
  349.  move.b PASSBUFFER,d0
  350.  and.w #$7f,d0
  351.  move.w d0,PLR1_energy
  352.  move.b PASSBUFFER+1,d0
  353.  btst #7,d0
  354.  sne PLR1_GunData+32+7
  355.  btst #6,d0
  356.  sne PLR1_GunData+32*2+7
  357.  btst #5,d0
  358.  sne PLR1_GunData+32*4+7
  359.  btst #4,d0
  360.  sne PLR1_GunData+32*7+7
  361.  and.w #%1111,d0
  362.  move.w d0,MAXLEVEL
  363.  move.b PASSBUFFER+2,d0
  364.  and.w #$7f,d0
  365.  lsl.w #3,d0
  366.  move.w d0,PLR1_GunData
  367.  move.b PASSBUFFER+3,d0
  368.  and.w #$7f,d0
  369.  lsl.w #3,d0
  370.  move.w d0,PLR1_GunData+32
  371.  move.b PASSBUFFER+4,d0
  372.  and.w #$7f,d0
  373.  lsl.w #3,d0
  374.  move.w d0,PLR1_GunData+32*2
  375.  move.b PASSBUFFER+5,d0
  376.  and.w #$7f,d0
  377.  lsl.w #3,d0
  378.  move.w d0,PLR1_GunData+32*4
  379.  move.b PASSBUFFER+6,d0
  380.  and.w #$7f,d0
  381.  lsl.w #3,d0
  382.  move.w d0,PLR1_GunData+32*7
  383.  rts
  384.  
  385.  
  386. SETPLAYERS:
  387.  
  388.  move.w PLOPT,d0
  389.  add.b #'a',d0
  390.  move.b d0,LEVA
  391.  move.b d0,LEVB
  392.  move.b d0,LEVC
  393.  
  394.  cmp.b #'s',mors
  395.  beq SLAVESETUP
  396.  cmp.b #'m',mors
  397.  beq MASTERSETUP
  398.  st NASTY
  399. onepla:
  400.  rts
  401.  
  402. NASTY: dc.w 0
  403.  
  404. MASTERSETUP:
  405.  bsr TWOPLAYER
  406.  clr.b NASTY
  407.  move.w PLOPT,d0
  408.  jsr SENDFIRST
  409.  rts
  410.  
  411. SLAVESETUP:
  412.  bsr TWOPLAYER
  413.  CLR.B NASTY
  414.  jsr RECFIRST
  415.  move.w d0,PLOPT
  416.  add.b #'a',d0
  417.  move.b d0,LEVA
  418.  move.b d0,LEVB
  419.  move.b d0,LEVC
  420.  rts
  421.      
  422. ********************************************************
  423.  
  424. ASKFORDISK:
  425.  PRSDD
  426.  move.w #3,OptScrn
  427.  bsr DRAWOPTSCRN
  428.  
  429. .wtrel:
  430.  btst #7,$bfe001
  431.  beq.s .wtrel
  432.  
  433. wtclick:
  434.  add.w #$235,RVAL1
  435.  btst #6,$bfe001
  436.  bne.s wtclick
  437.  
  438.  rts
  439.  
  440. CLRSPRITES: 
  441.  move.l #nullspr,d0
  442.  move.w d0,tsp0l
  443.  move.w d0,tsp1l
  444.  move.w d0,tsp2l
  445.  move.w d0,tsp3l
  446.  move.w d0,tsp4l
  447.  move.w d0,tsp5l
  448.  move.w d0,tsp6l
  449.  move.w d0,tsp7l
  450.  swap d0
  451.  move.w d0,tsp0h
  452.  move.w d0,tsp1h
  453.  move.w d0,tsp2h
  454.  move.w d0,tsp3h
  455.  move.w d0,tsp4h
  456.  move.w d0,tsp5h
  457.  move.w d0,tsp6h
  458.  move.w d0,tsp7h 
  459.  rts
  460.  
  461. ********************************************************
  462.  
  463. READMAINMENU:
  464.  
  465.  move.b #'n',mors
  466.  
  467.  move.w MAXLEVEL,d0
  468.  
  469.  move.l #CURRENTLEVELLINE,a1
  470.  muls #40,d0
  471.  move.l #LEVEL_OPTS,a0
  472.  add.l d0,a0
  473.  bsr PUTINLINE
  474.  
  475. ; Stay here until 'play game' is selected.
  476.  
  477.  move.w #0,OptScrn
  478.  bsr DRAWOPTSCRN
  479.  move.w #1,OPTNUM
  480.  
  481.  bsr HIGHLIGHT
  482.  
  483.  bsr WAITREL
  484. .rdlop:
  485.  bsr CHECKMENU
  486.  tst.w d0
  487.  blt.s .rdlop
  488.  
  489.  bne .noopt
  490.  
  491.  bra MASTERMENU
  492.  
  493. .noopt:
  494.  
  495.  cmp.w #1,d0
  496.  beq playgame
  497.  
  498.  cmp.w #2,d0
  499.  bne .nocontrol
  500.  
  501.  bsr CHANGECONTROLS
  502.  
  503.  move.w #0,OptScrn
  504.  bsr DRAWOPTSCRN
  505.  move.w #0,OPTNUM
  506.  
  507.  bsr HIGHLIGHT
  508.  
  509.  bsr WAITREL
  510.  bra .rdlop
  511.  
  512. .nocontrol:
  513.  
  514.  cmp.w #3,d0
  515.  bne .nocred
  516.  bsr SHOWCREDITS
  517.  move.w #0,OptScrn
  518.  bsr DRAWOPTSCRN
  519.  move.w #1,OPTNUM
  520.  
  521.  bsr HIGHLIGHT
  522.  
  523.  bsr WAITREL
  524.  bra .rdlop
  525.  
  526.  
  527. .nocred:
  528.  
  529.  cmp.w #4,d0
  530.  bne playgame
  531.  bsr WAITREL
  532.  
  533.  move.l #PASSWORDLINE+12,a0
  534.  moveq #15,d2
  535. .clrline:
  536.  move.b #32,(a0)+
  537.  dbra d2,.clrline 
  538.  move.w #0,OptScrn
  539.  bsr DRAWOPTSCRN
  540.  
  541.  IFEQ CD32VER
  542.  clr.b lastpressed
  543.  move.l #PASSWORDLINE+12,a0
  544.  move.w #0,d1
  545. .ENTERPASS:
  546.  tst.b lastpressed
  547.  beq .ENTERPASS
  548.  move.b lastpressed,d2
  549.  move.b #0,lastpressed
  550.  move.l #KVALTOASC,a1
  551.  
  552.  cmp.l #'<-- ',(a1,d2.w*4)
  553.  bne .nodel
  554.  
  555.  tst.b d1
  556.  beq .nodel
  557.  
  558.  subq #1,d1
  559.  move.b #32,-(a0)
  560.  movem.l d0-d7/a0-a6,-(a7)
  561.  bsr JUSTDRAWIT
  562.  movem.l (a7)+,d0-d7/a0-a6
  563.  bra .ENTERPASS
  564.  
  565. .nodel:
  566.  
  567.  cmp.l #'RTN ',(a1,d2.w*4)
  568.  beq .FORGETIT
  569.  cmp.l #'ESC ',(a1,d2.w*4)
  570.  beq .FORGETIT
  571.  move.b 1(a1,d2.w*4),d2
  572.  cmp.b #65,d2
  573.  blt .ENTERPASS
  574.  cmp.b #'Z',d2
  575.  bgt .ENTERPASS
  576.  move.b d2,(a0)+
  577.  move.w #0,OptScrn
  578.  movem.l d0-d7/a0-a6,-(a7)
  579.  bsr JUSTDRAWIT
  580.  movem.l (a7)+,d0-d7/a0-a6
  581.  add.w #1,d1
  582.  cmp.w #16,d1
  583.  blt .ENTERPASS
  584.  
  585.  ENDC
  586.  IFNE CD32VER
  587.  move.l #PASSWORDLINE+12,a0
  588.  move.w #15,d0
  589. .ENTERPASS:
  590.  bsr GETACHAR
  591.  dbra d0,.ENTERPASS
  592.  ENDC
  593.  
  594.  bsr PASSLINETOGAME
  595.  tst.w d0
  596.  bne .FORGETIT
  597.  
  598.  bsr GETSTATS
  599.  move.w MAXLEVEL,d0
  600.  move.l #CURRENTLEVELLINE,a1
  601.  muls #40,d0
  602.  move.l #LEVEL_OPTS,a0
  603.  add.l d0,a0
  604.  bsr PUTINLINE
  605.  
  606. .FORGETIT:
  607.  bsr WAITREL
  608.  bsr CALCPASSWORD
  609.  
  610.  move.w #0,OptScrn
  611.  bsr DRAWOPTSCRN
  612.  
  613.  move.w #0,OPTNUM
  614.  
  615.  bsr HIGHLIGHT
  616.  
  617.  bra .rdlop 
  618.  
  619. playgame:
  620.  
  621.  move.w MAXLEVEL,PLOPT
  622.  rts
  623.  
  624. LEVELSELECTED:
  625.  dc.w 0
  626.  
  627.  IFNE CD32VER
  628. GETACHAR:
  629.  moveq #0,d7
  630.  move.b #'A',(a0)
  631.  movem.l d0-d7/a0-a6,-(a7)
  632.  jsr JUSTDRAWIT
  633.  movem.l (a7)+,d0-d7/a0-a6
  634.  
  635. .wtnum:
  636.  btst #1,$dff00c
  637.  sne d1
  638.  btst #1,$dff00d
  639.  sne d2
  640.  btst #0,$dff00c
  641.  sne d3
  642.  btst #0,$dff00d
  643.  sne d4
  644.  
  645.  eor.b d1,d3
  646.  eor.b d2,d4
  647.  
  648.  tst.b d1
  649.  beq.s .NODELETE
  650.  cmp.w #15,d0
  651.  beq.s .NODELETE
  652.  move.b #32,(a0)
  653.  subq #1,a0
  654.  addq #1,d0
  655.  move.b (a0),d7
  656.  sub.b #'A',d7
  657.  movem.l d0-d7/a0-a6,-(a7)
  658.  jsr JUSTDRAWIT
  659.  movem.l (a7)+,d0-d7/a0-a6
  660.  jsr WAITFORNOPRESS
  661.  bra .wtnum
  662. .NODELETE
  663.  
  664.  tst.b d4
  665.  bne.s .PREVNUM
  666.  tst.b d3
  667.  bne.s .NEXTNUM
  668.  btst #7,$bfe001
  669.  bne.s .wtnum
  670.  addq #1,a0
  671.  jsr WAITFORNOPRESS
  672.  rts
  673.  
  674. .PREVNUM:
  675.  subq #1,d7
  676.  bge.s .nonegg
  677.  moveq #15,d7
  678. .nonegg:
  679.  move.b d7,d1
  680.  add.b #'A',d1
  681.  move.b d1,(a0)
  682.  movem.l d0-d7/a0-a6,-(a7)
  683.  jsr JUSTDRAWIT
  684.  movem.l (a7)+,d0-d7/a0-a6
  685.  
  686.  jsr WAITFORNOPRESS
  687.  
  688.  bra .wtnum
  689.  
  690. .NEXTNUM:
  691.  addq #1,d7
  692.  cmp.w #15,d7
  693.  ble.s .nobigg
  694.  moveq #0,d7
  695. .nobigg:
  696.  move.b d7,d1
  697.  add.b #'A',d1
  698.  move.b d1,(a0)
  699.  movem.l d0-d7/a0-a6,-(a7)
  700.  jsr JUSTDRAWIT
  701.  movem.l (a7)+,d0-d7/a0-a6
  702.  jsr WAITFORNOPRESS
  703.  bra .wtnum
  704.  rts
  705.  ENDC
  706.  
  707.  
  708. MASTERMENU:
  709.  
  710.  move.b #'m',mors
  711.  
  712.  move.w #0,LEVELSELECTED
  713.  
  714.  move.w #0,d0 
  715.  move.l #CURRENTLEVELLINEM,a1
  716.  muls #40,d0
  717.  move.l #LEVEL_OPTS,a0
  718.  add.l d0,a0
  719.  bsr PUTINLINE
  720.  
  721. ; Stay here until 'play game' is selected.
  722.  
  723.  move.w #4,OptScrn
  724.  bsr DRAWOPTSCRN
  725.  move.w #1,OPTNUM
  726.  
  727.  bsr HIGHLIGHT
  728.  
  729.  bsr WAITREL
  730. .rdlop:
  731.  bsr CHECKMENU
  732.  tst.w d0
  733.  blt.s .rdlop
  734.  bsr WAITREL
  735.  
  736.  cmp.w #1,d0
  737.  bne.s .nonextlev
  738.  
  739.  move.w LEVELSELECTED,d0
  740.  add.w #1,d0
  741.  cmp.w MAXLEVEL,d0
  742.  blt .nowrap
  743.  moveq #0,d0
  744. .nowrap:
  745.  move.w d0,LEVELSELECTED
  746.  move.l #CURRENTLEVELLINEM,a1
  747.  muls #40,d0
  748.  move.l #LEVEL_OPTS,a0
  749.  add.l d0,a0
  750.  bsr PUTINLINE
  751.  bsr JUSTDRAWIT
  752.  bra .rdlop
  753.  
  754. .nonextlev:
  755.  cmp.w #2,d0
  756.  beq .playgame
  757.  
  758.  cmp.w #0,d0
  759.  bne .noopt
  760.  
  761.  bra SLAVEMENU
  762.  
  763. .noopt:
  764.  
  765.  cmp.w #3,d0
  766.  bne .nocontrol
  767.  
  768.  bsr CHANGECONTROLS
  769.  
  770.  move.w #4,OptScrn
  771.  bsr DRAWOPTSCRN
  772.  move.w #0,OPTNUM
  773.  
  774.  bsr HIGHLIGHT
  775.  
  776.  bsr WAITREL
  777.  bra .rdlop
  778.  
  779. .nocontrol:
  780.  
  781. .playgame
  782.  
  783.  move.w LEVELSELECTED,PLOPT
  784.  rts
  785.  
  786. SLAVEMENU:
  787.  
  788.  move.b #'s',mors
  789.  
  790. ; Stay here until 'play game' is selected.
  791.  
  792.  move.w #5,OptScrn
  793.  bsr DRAWOPTSCRN
  794.  move.w #1,OPTNUM
  795.  
  796.  bsr HIGHLIGHT
  797.  
  798.  bsr WAITREL
  799. .rdlop:
  800.  bsr CHECKMENU
  801.  tst.w d0
  802.  blt.s .rdlop
  803.  bsr WAITREL
  804.  
  805.  cmp.w #1,d0
  806.  beq .playgame
  807.  
  808.  cmp.w #0,d0
  809.  bne .noopt
  810.  
  811.  bra READMAINMENU
  812.  
  813. .noopt:
  814.  
  815.  cmp.w #2,d0
  816.  bne .nocontrol
  817.  
  818.  bsr CHANGECONTROLS
  819.  
  820.  move.w #0,OptScrn
  821.  bsr DRAWOPTSCRN
  822.  move.w #0,OPTNUM
  823.  
  824.  bsr HIGHLIGHT
  825.  
  826.  bsr WAITREL
  827.  bra .rdlop
  828.  
  829. .nocontrol:
  830. .playgame:
  831.  
  832.  rts
  833.  
  834. TWOPLAYER:
  835.  move.w #0,OldEnergy
  836.  move.w #127,Energy
  837.  jsr EnergyBar
  838.  
  839.  move.w #63,OldAmmo
  840.  move.w #0,Ammo
  841.  jsr AmmoBar
  842.  move.w #0,OldAmmo
  843.  
  844.  move.w #127,PLR1_energy
  845.  move.w #127,PLR2_energy 
  846.  move.w #160,PLR1_GunData    ; 10 shots pistol
  847.  st PLR1_GunData+7
  848.  
  849.  st.b PLR1_GunData+32+7
  850.  move.w #80*4,PLR1_GunData+32
  851.  
  852.  st.b PLR1_GunData+64+7
  853.  move.w #80*4,PLR1_GunData+64
  854.  
  855.  st.b PLR1_GunData+32*3+7
  856.  move.w #80*4,PLR1_GunData+32*3
  857.  
  858.  st.b PLR1_GunData+32*4+7
  859.  move.w #80*4,PLR1_GunData+32*4
  860.  
  861.  st.b PLR1_GunData+32*7+7
  862.  move.w #80*4,PLR1_GunData+32*7
  863.  
  864.  move.b #0,PLR1_GunSelected
  865.  
  866.  move.w #160,PLR2_GunData    ; 10 shots pistol
  867.  st PLR2_GunData+7
  868.  st.b PLR2_GunData+32+7
  869.  move.w #80*4,PLR2_GunData+32
  870.  
  871.  st.b PLR2_GunData+64+7
  872.  move.w #80*4,PLR2_GunData+64
  873.  
  874.  st.b PLR2_GunData+32*3+7
  875.  move.w #80*4,PLR2_GunData+32*3
  876.  
  877.  st.b PLR2_GunData+32*4+7
  878.  move.w #80*4,PLR2_GunData+32*4
  879.  
  880.  st.b PLR2_GunData+32*7+7
  881.  move.w #80*4,PLR2_GunData+32*7
  882.  move.b #0,PLR2_GunSelected
  883.  rts
  884.  
  885. newdum:
  886.  rts
  887.  
  888. DEFAULTGAME:
  889.  move.w #0,MAXLEVEL
  890.  
  891.  move.w #0,OldEnergy
  892.  move.w #127,Energy
  893.  jsr EnergyBar
  894.  
  895.  move.w #63,OldAmmo
  896.  move.w #0,Ammo
  897.  jsr AmmoBar
  898.  move.w #0,OldAmmo
  899.  
  900.  move.w #127,PLR1_energy
  901.  move.w #127,PLR2_energy 
  902.  move.w #160,PLR1_GunData    ; 10 shots pistol
  903.  st PLR1_GunData+7
  904.  clr.b PLR1_GunData+32+7
  905.  clr.w PLR1_GunData+32
  906.  clr.b PLR1_GunData+64+7
  907.  clr.w PLR1_GunData+64
  908.  clr.b PLR1_GunData+32*3+7
  909.  clr.w PLR1_GunData+32*3
  910.  clr.b PLR1_GunData+32*4+7
  911.  clr.w PLR1_GunData+32*4
  912.  clr.b PLR1_GunData+32*7+7
  913.  clr.w PLR1_GunData+32*7
  914.  move.b #0,PLR1_GunSelected
  915.  
  916. ; move.l #RealTable-2000,a3
  917. ; move.l #PROTCALC-5000,a1
  918. ; move.l #ASKFORPROT-10000,a2
  919. ; move.l #PROTCALLENC-800,a4
  920. ; adda.w #800,a4
  921. ; jsr (a4)
  922.  
  923. ************************************************
  924. * TEMPORARY MEASURE: REMOVE BEFORE RELEASE *****
  925. ************************************************
  926.  
  927. ; tst.w protA
  928. ; bne.s .noreset
  929. ; move.l #0,a7
  930. ;.noreset:
  931.  
  932. ************************************************
  933.  
  934.  move.w #160,PLR2_GunData    ; 10 shots pistol
  935.  st PLR2_GunData+7
  936.  clr.b PLR2_GunData+32+7
  937.  clr.w PLR2_GunData+32
  938.  clr.b PLR2_GunData+64+7
  939.  clr.w PLR2_GunData+64
  940.  clr.b PLR2_GunData+32*3+7
  941.  clr.w PLR2_GunData+32*3
  942.  clr.b PLR2_GunData+32*4+7
  943.  clr.w PLR2_GunData+32*4
  944.  clr.b PLR2_GunData+32*7+7
  945.  clr.w PLR2_GunData+32*7
  946.  move.b #0,PLR2_GunSelected
  947.  
  948.  bsr CALCPASSWORD
  949.  
  950.  rts
  951.  
  952. CHKPROT: dc.w 0
  953.  
  954. GETPARITY:
  955.  move.w #6,d3
  956. .calcparity:
  957.  btst d3,d0
  958.  beq.s .nochange
  959.  bchg #7,d0
  960. .nochange:
  961.  dbra d3,.calcparity
  962.  rts
  963.  
  964. CHECKPARITY:
  965.  move.w #6,d3
  966.  move.b #$0,d2
  967. .calcparity:
  968.  btst d3,d0
  969.  beq.s .nochange
  970.  bchg #7,d2
  971. .nochange:
  972.  dbra d3,.calcparity
  973.  move.b d0,d1
  974.  and.b #$80,d1
  975.  eor.b d1,d2
  976.  sne.s d5
  977.  rts
  978.  
  979. CALCPASSWORD:
  980.  move.b PLR1_energy+1,d0
  981.  bsr GETPARITY
  982.  move.b d0,PASSBUFFER
  983.  moveq #0,d0
  984.  tst.b PLR1_GunData+32+7
  985.  sne d0
  986.  lsl.w #1,d0
  987.  tst.b PLR1_GunData+64+7
  988.  sne d0
  989.  lsl.w #1,d0
  990.  tst.b PLR1_GunData+32*4+7
  991.  sne d0
  992.  lsl.w #1,d0
  993.  tst.b PLR1_GunData+32*7+7
  994.  sne d0
  995.  lsr.w #3,d0
  996.  and.b #%11110000,d0
  997.  or.b MAXLEVEL+1,d0
  998.  move.b d0,PASSBUFFER+1
  999.  eor.b #%10110101,d0
  1000.  neg.b d0
  1001.  add.b #50,d0
  1002.  move.b d0,PASSBUFFER+7
  1003.  
  1004.  move.w PLR1_GunData,d0
  1005.  lsr.w #3,d0
  1006.  bsr GETPARITY
  1007.  move.b d0,PASSBUFFER+2
  1008.  move.w PLR1_GunData+32,d0
  1009.  lsr.w #3,d0
  1010.  bsr GETPARITY
  1011.  move.b d0,PASSBUFFER+3
  1012.  move.w PLR1_GunData+32*2,d0
  1013.  lsr.w #3,d0
  1014.  bsr GETPARITY
  1015.  move.b d0,PASSBUFFER+4
  1016.  move.w PLR1_GunData+32*4,d0
  1017.  lsr.w #3,d0
  1018.  bsr GETPARITY
  1019.  move.b d0,PASSBUFFER+5
  1020.  move.w PLR1_GunData+32*7,d0
  1021.  lsr.w #3,d0
  1022.  bsr GETPARITY
  1023.  move.b d0,PASSBUFFER+6
  1024.  
  1025.  move.w #3,d0
  1026.  move.l #PASSBUFFER,a0
  1027.  move.l #PASSBUFFER+8,a1
  1028.  move.l #PASS,a2
  1029.  moveq #0,d4
  1030. mixemup:
  1031.  move.b (a0)+,d1
  1032.  move.b -(a1),d2
  1033.  not.b d2
  1034.  moveq #0,d3
  1035.  lsr.b #1,d1
  1036.  addx.w d3,d3
  1037.  lsr.b #1,d2
  1038.  addx.w d3,d3
  1039.  lsr.b #1,d1
  1040.  addx.w d3,d3
  1041.  lsr.b #1,d2
  1042.  addx.w d3,d3
  1043.  lsr.b #1,d1
  1044.  addx.w d3,d3
  1045.  lsr.b #1,d2
  1046.  addx.w d3,d3
  1047.  lsr.b #1,d1
  1048.  addx.w d3,d3
  1049.  lsr.b #1,d2
  1050.  addx.w d3,d3
  1051.  lsr.b #1,d1
  1052.  addx.w d3,d3
  1053.  lsr.b #1,d2
  1054.  addx.w d3,d3
  1055.  lsr.b #1,d1
  1056.  addx.w d3,d3
  1057.  lsr.b #1,d2
  1058.  addx.w d3,d3
  1059.  lsr.b #1,d1
  1060.  addx.w d3,d3
  1061.  lsr.b #1,d2
  1062.  addx.w d3,d3
  1063.  lsr.b #1,d1
  1064.  addx.w d3,d3
  1065.  lsr.b #1,d2
  1066.  addx.w d3,d3
  1067.  move.w d3,(a2)+
  1068.  
  1069.  dbra d0,mixemup
  1070.  
  1071.  move.l #PASSWORDLINE+12,a0
  1072.  move.l #PASS,a1
  1073.  move.w #7,d0
  1074. putinpassline:
  1075.  move.b (a1),d1
  1076.  and.b #%1111,d1
  1077.  add.b #65,d1
  1078.  move.b d1,(a0)+
  1079.  move.b (a1)+,d1
  1080.  lsr.b #4,d1
  1081.  and.b #%1111,d1
  1082.  add.b #65,d1
  1083.  move.b d1,(a0)+
  1084.  dbra d0,putinpassline
  1085.  rts
  1086.  
  1087. PASSLINETOGAME:
  1088.  move.l #PASSWORDLINE+12,a0
  1089.  move.l #PASS,a1
  1090.  move.w #7,d0
  1091. getbuff:
  1092.  move.b (a0)+,d1
  1093.  move.b (a0)+,d2
  1094.  sub.b #65,d1
  1095.  sub.b #65,d2
  1096.  and.b #%1111,d1
  1097.  and.b #%1111,d2
  1098.  lsl.b #4,d2
  1099.  or.b d2,d1
  1100.  move.b d1,(a1)+
  1101.  dbra d0,getbuff
  1102.  
  1103.  move.l #PASS,a0
  1104.  move.l #PASSBUFFER,a1
  1105.  move.l #PASSBUFFER+8,a2
  1106.  move.w #3,d0
  1107.  moveq #0,d4
  1108. unmix:
  1109.  move.w (a0)+,d1
  1110.  moveq #0,d2
  1111.  moveq #0,d3
  1112.  lsr.w #1,d1
  1113.  addx.w d3,d3
  1114.  lsr.w #1,d1
  1115.  addx.w d2,d2
  1116.  lsr.w #1,d1
  1117.  addx.w d3,d3
  1118.  lsr.w #1,d1
  1119.  addx.w d2,d2
  1120.  lsr.w #1,d1
  1121.  addx.w d3,d3
  1122.  lsr.w #1,d1
  1123.  addx.w d2,d2
  1124.  lsr.w #1,d1
  1125.  addx.w d3,d3
  1126.  lsr.w #1,d1
  1127.  addx.w d2,d2
  1128.  lsr.w #1,d1
  1129.  addx.w d3,d3
  1130.  lsr.w #1,d1
  1131.  addx.w d2,d2
  1132.  lsr.w #1,d1
  1133.  addx.w d3,d3
  1134.  lsr.w #1,d1
  1135.  addx.w d2,d2
  1136.  lsr.w #1,d1
  1137.  addx.w d3,d3
  1138.  lsr.w #1,d1
  1139.  addx.w d2,d2
  1140.  lsr.w #1,d1
  1141.  addx.w d3,d3
  1142.  lsr.w #1,d1
  1143.  addx.w d2,d2
  1144.  not.b d3
  1145.  move.b d3,-(a2)
  1146.  move.b d2,(a1)+
  1147.  dbra d0,unmix
  1148.  
  1149.  move.b PASSBUFFER,d0
  1150.  bsr CHECKPARITY
  1151.  tst.b d5
  1152.  bne illega
  1153.  move.b PASSBUFFER+2,d0
  1154.  bsr CHECKPARITY
  1155.  tst.b d5
  1156.  bne illega
  1157.  move.b PASSBUFFER+3,d0
  1158.  bsr CHECKPARITY
  1159.  tst.b d5
  1160.  bne illega
  1161.  move.b PASSBUFFER+4,d0
  1162.  bsr CHECKPARITY
  1163.  tst.b d5
  1164.  bne illega
  1165.  move.b PASSBUFFER+5,d0
  1166.  bsr CHECKPARITY
  1167.  tst.b d5
  1168.  bne illega
  1169.  move.b PASSBUFFER+6,d0
  1170.  bsr CHECKPARITY
  1171.  tst.b d5
  1172.  bne illega
  1173.  
  1174.  move.b PASSBUFFER+1,d0
  1175.  eor.b #%10110101,d0
  1176.  neg.b d0
  1177.  add.b #50,d0
  1178.  cmp.b PASSBUFFER+7,d0
  1179.  bne illega
  1180.  
  1181.  move.w #0,d0
  1182.  rts
  1183.  
  1184. illega:
  1185.  
  1186.  move.w #-1,d0
  1187.  
  1188.  rts
  1189.  
  1190. PASSBUFFER:
  1191.  ds.b 8
  1192.  
  1193. CHECKBUFFER: ds.b 8
  1194.  
  1195. PASS:
  1196.  ds.b 16
  1197.  
  1198. **************************************************
  1199.  
  1200. CHANGECONTROLS:
  1201.  
  1202.  move.w #6,OptScrn
  1203.  bsr DRAWOPTSCRN
  1204.  move.w #0,OPTNUM
  1205.  bsr HIGHLIGHT
  1206.  bsr WAITREL
  1207.  
  1208. .rdlop:
  1209.  bsr CHECKMENU
  1210.  tst.w d0
  1211.  blt.s .rdlop
  1212.  
  1213.  cmp.w #12,d0
  1214.  beq .backtomain
  1215.  
  1216.  move.l #KEY_LINES,a0
  1217.  move.w d0,d1
  1218.  muls #40,d1
  1219.  add.l d1,a0
  1220.  add.w #32,a0
  1221.  move.l #$20202020,(a0)
  1222.  movem.l d0/a0,-(a7)
  1223.  bsr JUSTDRAWIT
  1224.  movem.l (a7)+,d0/a0 
  1225.  
  1226.  clr.b lastpressed
  1227.  
  1228. .wtkey
  1229.  tst.b lastpressed
  1230.  beq .wtkey
  1231.  
  1232.  move.l #CONTROLBUFFER,a1
  1233.  moveq #0,d1
  1234.  move.b lastpressed,d1
  1235.  move.b d1,(a1,d0.w)
  1236.  move.l #KVALTOASC,a1
  1237.  move.l (a1,d1.w*4),(a0)
  1238.  bsr JUSTDRAWIT
  1239.  bsr WAITREL
  1240.  bra .rdlop
  1241.  
  1242. .backtomain:
  1243.  rts
  1244.  
  1245. **************************************************
  1246.  
  1247.  
  1248. MAXLEVEL: dc.w 0
  1249.  
  1250. SHOWCREDITS:
  1251.  move.w #2,OptScrn
  1252.  bsr DRAWOPTSCRN
  1253.  move.w #0,OPTNUM
  1254.  bsr HIGHLIGHT
  1255.  
  1256.  bsr WAITREL
  1257.  
  1258. .rdlop:
  1259.  bsr CHECKMENU
  1260.  tst.w d0
  1261.  blt.s .rdlop
  1262.  
  1263.  bra READMAINMENU
  1264.  
  1265. HELDDOWN:
  1266.  dc.w 0
  1267.  
  1268. WAITREL:
  1269.  
  1270.  movem.l d0/d1/d2/d3,-(a7)
  1271.  
  1272.  move.l #KeyMap,a5
  1273. WAITREL2:
  1274.  btst #7,$bfe001
  1275.  beq.s WAITREL2
  1276.  tst.b $40(a5)
  1277.  bne.s WAITREL2
  1278.  tst.b $44(a5)
  1279.  bne.s WAITREL2
  1280.  tst.b $4c(a5)
  1281.  bne.s WAITREL2
  1282.  tst.b $4d(a5)
  1283.  bne.s WAITREL2
  1284.  
  1285.  btst #1,$dff00c
  1286.  sne d0
  1287.  btst #1,$dff00d
  1288.  sne d1
  1289.  btst #0,$dff00c
  1290.  sne d2
  1291.  btst #0,$dff00d
  1292.  sne d3
  1293.  
  1294.  eor.b d0,d2
  1295.  eor.b d1,d3
  1296.  tst.b d2
  1297.  bne.s WAITREL2
  1298.  tst.b d3
  1299.  bne.s WAITREL2
  1300.  
  1301.  
  1302.  movem.l (a7)+,d0/d1/d2/d3
  1303.  rts
  1304.  
  1305. PUTINLINE:
  1306.  moveq #39,d0
  1307. pill
  1308.  move.b (a0)+,(a1)+
  1309.  dbra d0,pill
  1310.  rts
  1311.  
  1312. CHECKMENU:
  1313.  btst #1,$dff00c
  1314.  sne d0
  1315.  btst #1,$dff00d
  1316.  sne d1
  1317.  btst #0,$dff00c
  1318.  sne d2
  1319.  btst #0,$dff00d
  1320.  sne d3
  1321.  
  1322.  eor.b d0,d2
  1323.  eor.b d1,d3
  1324.  
  1325.  move.l #KeyMap,a5
  1326.  move.b $4c(a5),d0
  1327.  move.b $4d(a5),d1
  1328.  or.b d1,d3
  1329.  or.b d0,d2
  1330.  
  1331.  move.w OptScrn,d0
  1332.  move.l #MENUDATA,a0
  1333.  move.l 4(a0,d0.w*8),a0    ; opt data
  1334.  
  1335.  move.w OPTNUM,d0
  1336.  
  1337.  tst.b d2
  1338.  beq.s NOPREV
  1339.  
  1340.  
  1341.  sub.w #1,d0
  1342.  bge.s NOPREV
  1343.  
  1344.  move.w #0,d0 
  1345.  
  1346. NOPREV:
  1347.  
  1348.  tst.b d3
  1349.  beq.s NONEXT
  1350.  
  1351.  bsr WAITREL
  1352.  
  1353.  add.w #1,d0
  1354.  tst.w (a0,d0.w*8)
  1355.  bge.s NONEXT
  1356.  
  1357.  subq #1,d0
  1358.  
  1359. NONEXT:
  1360.  
  1361.  cmp.w OPTNUM,d0
  1362.  beq.s .nochange
  1363.  
  1364.  bsr HIGHLIGHT
  1365.  move.w d0,OPTNUM
  1366.  bsr HIGHLIGHT
  1367.  bsr WAITREL
  1368.  
  1369. .nochange:
  1370.  
  1371.  move.w #-1,d0
  1372.  
  1373.  btst #7,$bfe001
  1374.  beq.s select
  1375.  move.b $40(a5),d1
  1376.  or.b $44(a5),d1
  1377.  tst.b d1
  1378.  beq.s noselect
  1379.  
  1380. select:
  1381.  bsr WAITREL
  1382.  move.w OPTNUM,d0
  1383. noselect:
  1384.  
  1385.  rts
  1386.  
  1387. HIGHLIGHT:
  1388.  
  1389.  SAVEREGS
  1390.  
  1391.  move.w OptScrn,d0
  1392.  move.l #MENUDATA,a0
  1393.  move.l 4(a0,d0.w*8),a0
  1394.  move.w OPTNUM,d0
  1395.  lea (a0,d0.w*8),a0
  1396.  move.w (a0)+,d0    ;left
  1397.  move.w (a0)+,d1    ;top
  1398.  move.w (a0)+,d2    ;width
  1399.  
  1400.  muls #16*8,d1
  1401.  move.l OPTSPRADDR,a1
  1402.  add.w d1,a1
  1403.  add.w #8+16,a1
  1404.  move.l #SCRTOSPR2,a5
  1405.  adda.w d0,a5
  1406.  adda.w d0,a5
  1407.  
  1408. NOTLOP:
  1409.  
  1410.  move.w (a5)+,d3
  1411.  lea (a1,d3.w),a2
  1412.  not.b (a2)
  1413.  not.b 16(a2)
  1414.  not.b 32(a2)
  1415.  not.b 48(a2)
  1416.  not.b 64(a2)
  1417.  not.b 80(a2)
  1418.  not.b 96(a2)
  1419.  not.b 112(a2)
  1420.  not.b 128(a2)
  1421.  subq #1,d2
  1422.  bgt.s NOTLOP
  1423.  
  1424.  GETREGS
  1425.  rts
  1426.  
  1427. SCRTOSPR2:
  1428. val SET 0
  1429.  REPT 6
  1430.  dc.w val+0
  1431.  dc.w val+1
  1432.  dc.w val+2
  1433.  dc.w val+3
  1434.  dc.w val+4
  1435.  dc.w val+5
  1436.  dc.w val+6
  1437.  dc.w val+7
  1438. val SET val+258*16
  1439.  ENDR
  1440.  
  1441. CLROPTSCRN:
  1442.  
  1443.  move.l #$2cdfea,d0
  1444.  move.w (a4,d0.l),d0
  1445.  add.w d0,RVAL2
  1446.  
  1447.  move.l OPTSPRADDR,a0
  1448.  lea 16(a0),a1
  1449.  lea 16+(258*16)(a0),a2
  1450.  lea 16+(258*16*2)(a0),a3
  1451.  lea 16+(258*16*3)(a0),a4
  1452.  lea 258*16(a4),a0
  1453.  
  1454.  move.w #256,d0
  1455.  moveq #0,d1
  1456. CLRLOP:
  1457.  move.l d1,(a0)+
  1458.  move.l d1,(a0)+
  1459.  move.l d1,(a0)+
  1460.  move.l d1,(a0)+
  1461.  move.l d1,(a1)+
  1462.  move.l d1,(a1)+
  1463.  move.l d1,(a1)+
  1464.  move.l d1,(a1)+
  1465.  move.l d1,(a2)+
  1466.  move.l d1,(a2)+
  1467.  move.l d1,(a2)+
  1468.  move.l d1,(a2)+
  1469.  move.l d1,(a3)+
  1470.  move.l d1,(a3)+
  1471.  move.l d1,(a3)+
  1472.  move.l d1,(a3)+
  1473.  move.l d1,(a4)+
  1474.  move.l d1,(a4)+
  1475.  move.l d1,(a4)+
  1476.  move.l d1,(a4)+
  1477.  dbra d0,CLRLOP
  1478.  
  1479.  move.l OPTSPRADDR,a0
  1480.  move.w #44*256+64,(a0)
  1481.  move.w #44*256+2,8(a0)
  1482.  add.l #258*16,a0
  1483.  
  1484.  move.w #44*256+96,(a0)
  1485.  move.w #44*256+2,8(a0)
  1486.  add.l #258*16,a0
  1487.  
  1488.  move.w #44*256+128,(a0)
  1489.  move.w #44*256+2,8(a0)
  1490.  add.l #258*16,a0
  1491.  
  1492.  move.w #44*256+160,(a0)
  1493.  move.w #44*256+2,8(a0)
  1494.  add.l #258*16,a0
  1495.  
  1496.  move.w #44*256+192,(a0)
  1497.  move.w #44*256+2,8(a0)
  1498.  
  1499.  rts
  1500.  
  1501. DRAWOPTSCRN:
  1502.  
  1503.  bsr CLROPTSCRN
  1504.  
  1505. JUSTDRAWIT:
  1506.  
  1507.  move.l #font,a0
  1508.  move.l #MENUDATA,a1
  1509.  move.w OptScrn,d0
  1510.  move.l (a1,d0.w*8),a1
  1511.  
  1512.  move.l OPTSPRADDR,a3
  1513.  add.l #16,a3
  1514.  moveq #0,d2
  1515.  
  1516.  move.w #31,d0
  1517. linelop:
  1518.  move.w #39,d1
  1519.  move.l #SCRTOSPR,a4
  1520.  move.l a3,a2
  1521. charlop:
  1522.  move.b (a1)+,d2
  1523.  lea (a0,d2.w*8),a5
  1524.  move.b (a5)+,(a2)
  1525.  move.b (a5)+,16(a2)
  1526.  move.b (a5)+,32(a2)
  1527.  move.b (a5)+,48(a2)
  1528.  move.b (a5)+,64(a2)
  1529.  move.b (a5)+,80(a2)
  1530.  move.b (a5)+,96(a2)
  1531.  move.b (a5),112(a2)
  1532.  add.w (a4)+,a2
  1533.  dbra d1,charlop
  1534.  add.w #16*8,a3
  1535.  dbra d0,linelop
  1536.  
  1537.  rts
  1538.   
  1539. SCRTOSPR:
  1540.  dc.w 1,1,1,1,1,1,1,258*16-7
  1541.  dc.w 1,1,1,1,1,1,1,258*16-7
  1542.  dc.w 1,1,1,1,1,1,1,258*16-7
  1543.  dc.w 1,1,1,1,1,1,1,258*16-7
  1544.  dc.w 1,1,1,1,1,1,1,258*16-7
  1545.  dc.w 1,1,1,1,1,1,1,258*16-7
  1546.   
  1547. OPTNUM: dc.w 0
  1548. OptScrn: dc.w 0
  1549.  
  1550. MENUDATA:
  1551. ;0
  1552.  dc.l ONEPLAYERMENU_TXT
  1553.  dc.l ONEPLAYERMENU_OPTS
  1554. ;1
  1555.  dc.l INSTRUCTIONS_TXT
  1556.  dc.l INSTRUCTIONS_OPTS
  1557. ;2
  1558.  dc.l CREDITMENU_TXT
  1559.  dc.l CREDITMENU_OPTS
  1560. ;3
  1561.  dc.l ASKFORDISK_TXT
  1562.  dc.l ASKFORDISK_OPTS
  1563. ;4
  1564. ; dc.l ONEPLAYERMENU_TXT
  1565. ; dc.l ONEPLAYERMENU_OPTS
  1566.  dc.l MASTERPLAYERMENU_TXT
  1567.  dc.l MASTERPLAYERMENU_OPTS
  1568. ;5
  1569.  dc.l SLAVEPLAYERMENU_TXT
  1570.  dc.l SLAVEPLAYERMENU_OPTS
  1571. ;6
  1572.  dc.l CONTROL_TXT
  1573.  dc.l CONTROL_OPTS
  1574. ;7
  1575.  dc.l PROTMENU_TXT
  1576.  dc.l CONTROL_OPTS
  1577.  
  1578. ASKFORDISK_TXT:
  1579. ;      0123456789012345678901234567890123456789
  1580.  dc.b '                                        ' ;0
  1581.  dc.b '                                        ' ;1
  1582.  dc.b '                                        ' ;2
  1583.  dc.b '                                        ' ;3
  1584.  dc.b '                                        ' ;4
  1585.  dc.b '                                        ' ;5
  1586.  dc.b '                                        ' ;6
  1587.  dc.b '                                        ' ;7
  1588.  dc.b '                                        ' ;8
  1589.  dc.b '                                        ' ;9
  1590.  dc.b '                                        ' ;0
  1591.  dc.b '                                        ' ;1
  1592.  dc.b '                                        ' ;2
  1593.  dc.b '          INSERT LEVEL DISK             ' ;3
  1594.  dc.b '                                        ' ;4
  1595.  dc.b '          PRESS MOUSE BUTTON            ' ;5
  1596.  dc.b '          WHEN DISK ACTIVITY            ' ;6
  1597.  dc.b '               FINISHES                 ' ;7
  1598.  dc.b '                                        ' ;8
  1599.  dc.b '                                        ' ;9
  1600.  dc.b '                                        ' ;0
  1601.  dc.b '                                        ' ;1
  1602.  dc.b '                                        ' ;2
  1603.  dc.b '                                        ' ;3
  1604.  dc.b '                                        ' ;4
  1605.  dc.b '                                        ' ;5
  1606.  dc.b '                                        ' ;6
  1607.  dc.b '                                        ' ;7
  1608.  dc.b '                                        ' ;8
  1609.  dc.b '                                        ' ;9
  1610.  dc.b '                                        ' ;0
  1611.  dc.b '                                        ' ;1
  1612.  
  1613. ASKFORDISK_OPTS:
  1614.  dc.w -1
  1615.  
  1616.  
  1617. ONEPLAYERMENU_TXT:
  1618. ;      0123456789012345678901234567890123456789
  1619.  dc.b '                                        ' ;0
  1620.  dc.b '                                        ' ;1
  1621.  dc.b '                                        ' ;2
  1622.  dc.b '                                        ' ;3
  1623.  dc.b '                                        ' ;4
  1624.  dc.b '                                        ' ;5
  1625.  dc.b '                                        ' ;6
  1626.  dc.b '                                        ' ;7
  1627.  dc.b '                                        ' ;8
  1628.  dc.b '                                        ' ;9
  1629.  dc.b '                                        ' ;0
  1630. CURRENTLEVELLINE:
  1631.  dc.b '           LEVEL 1 : THE GATE           ' ;1 
  1632.  dc.b '                                        ' ;2
  1633.  dc.b '                1 PLAYER                ' ;3
  1634.  dc.b '                                        ' ;4
  1635.  dc.b '               PLAY  GAME               ' ;5
  1636.  dc.b '                                        ' ;6
  1637.  dc.b '            CONTROL  OPTIONS            ' ;7
  1638.  dc.b '                                        ' ;8
  1639.  dc.b '              GAME CREDITS              ' ;9
  1640.  dc.b '                                        ' ;0
  1641.  dc.b '                PASSWORD                ' ;1
  1642.  dc.b '                                        ' ;2
  1643. PASSWORDLINE:
  1644.  dc.b '                                        ' ;3
  1645.  dc.b '                                        ' ;4
  1646.  dc.b '                                        ' ;5
  1647.  dc.b '                                        ' ;6
  1648.  dc.b '                                        ' ;7
  1649.  dc.b '                                        ' ;8
  1650.  dc.b '                                        ' ;9
  1651.  dc.b '                                        ' ;0
  1652.  dc.b '                                        ' ;1
  1653.  
  1654. ONEPLAYERMENU_OPTS:
  1655.  dc.w 16,13,8,1
  1656.  dc.w 15,15,10,1
  1657.  dc.w 12,17,16,1
  1658.  dc.w 14,19,12,1
  1659.  dc.w 12,23,16,1
  1660.  dc.w -1
  1661.  
  1662.  
  1663. MASTERPLAYERMENU_TXT:
  1664. ;      0123456789012345678901234567890123456789
  1665.  dc.b '                                        ' ;0
  1666.  dc.b '                                        ' ;1
  1667.  dc.b '                                        ' ;2
  1668.  dc.b '                                        ' ;3
  1669.  dc.b '                                        ' ;4
  1670.  dc.b '                                        ' ;5
  1671.  dc.b '                                        ' ;6
  1672.  dc.b '                                        ' ;7
  1673.  dc.b '                                        ' ;8
  1674.  dc.b '                                        ' ;9
  1675.  dc.b '                                        ' ;0
  1676.  dc.b '                                        ' ;1
  1677.  dc.b '            2 PLAYER  MASTER            ' ;2
  1678.  dc.b '                                        ' ;3
  1679. CURRENTLEVELLINEM:
  1680.  dc.b '           LEVEL 1 : THE GATE           ' ;4 
  1681.  dc.b '                                        ' ;5
  1682.  dc.b '               PLAY  GAME               ' ;6
  1683.  dc.b '                                        ' ;7
  1684.  dc.b '            CONTROL  OPTIONS            ' ;8
  1685.  dc.b '                                        ' ;9
  1686.  dc.b '                                        ' ;0
  1687.  dc.b '                                        ' ;1
  1688.  dc.b '                                        ' ;2
  1689.  dc.b '                                        ' ;3
  1690.  dc.b '                                        ' ;4
  1691.  dc.b '                                        ' ;5
  1692.  dc.b '                                        ' ;6
  1693.  dc.b '                                        ' ;7
  1694.  dc.b '                                        ' ;8
  1695.  dc.b '                                        ' ;9
  1696.  dc.b '                                        ' ;0
  1697.  dc.b '                                        ' ;1
  1698.  
  1699. MASTERPLAYERMENU_OPTS:
  1700.  dc.w 12,12,16,1
  1701.  dc.w 6,14,28,1
  1702.  dc.w 15,16,10,1
  1703.  dc.w 12,18,16,1
  1704.  dc.w -1
  1705.  
  1706. SLAVEPLAYERMENU_TXT:
  1707. ;      0123456789012345678901234567890123456789
  1708.  dc.b '                                        ' ;0
  1709.  dc.b '                                        ' ;1
  1710.  dc.b '                                        ' ;2
  1711.  dc.b '                                        ' ;3
  1712.  dc.b '                                        ' ;4
  1713.  dc.b '                                        ' ;5
  1714.  dc.b '                                        ' ;6
  1715.  dc.b '                                        ' ;7
  1716.  dc.b '                                        ' ;8
  1717.  dc.b '                                        ' ;9
  1718.  dc.b '                                        ' ;9
  1719.  dc.b '                                        ' ;1
  1720.  dc.b '             2 PLAYER SLAVE             ' ;4
  1721.  dc.b '                                        ' ;3
  1722.  dc.b '               PLAY  GAME               ' ;2
  1723.  dc.b '                                        ' ;5
  1724.  dc.b '            CONTROL  OPTIONS            ' ;0
  1725.  dc.b '                                        ' ;1
  1726.  dc.b '                                        ' ;3
  1727.  dc.b '                                        ' ;7
  1728.  dc.b '                                        ' ;7
  1729.  dc.b '                                        ' ;3
  1730.  dc.b '                                        ' ;3
  1731.  dc.b '                                        ' ;3
  1732.  dc.b '                                        ' ;4
  1733.  dc.b '                                        ' ;5
  1734.  dc.b '                                        ' ;6
  1735.  dc.b '                                        ' ;7
  1736.  dc.b '                                        ' ;9
  1737.  dc.b '                                        ' ;9
  1738.  dc.b '                                        ' ;9
  1739.  dc.b '                                        ' ;9
  1740.  
  1741.  
  1742. PROTMENU_TXT:
  1743. ;      0123456789012345678901234567890123456789
  1744.  dc.b '                                        ' ;0
  1745.  dc.b '                                        ' ;1
  1746.  dc.b '                                        ' ;2
  1747.  dc.b '                                        ' ;3
  1748.  dc.b '                                        ' ;4
  1749.  dc.b '                                        ' ;5
  1750.  dc.b '                                        ' ;6
  1751.  dc.b '                                        ' ;7
  1752.  dc.b '                                        ' ;8
  1753.  dc.b '                                        ' ;9
  1754.  dc.b '                                        ' ;0
  1755.  dc.b '                                        ' ;1
  1756.  dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
  1757.  dc.b '                                        ' ;3
  1758. PROTLINE:
  1759.  dc.b '        TABLE 00 ROW 00 COLUMN 00       ' ;4
  1760.  dc.b '                                        ' ;5
  1761.  dc.b '                                        ' ;6
  1762.  dc.b '                                        ' ;7
  1763.  dc.b '                                        ' ;8
  1764.  dc.b '                                        ' ;9
  1765.  dc.b '                                        ' ;0
  1766.  dc.b '                                        ' ;1
  1767.  dc.b '                                        ' ;2
  1768.  dc.b '                                        ' ;3
  1769.  dc.b '                                        ' ;4
  1770.  dc.b '                                        ' ;5
  1771.  dc.b '                                        ' ;6
  1772.  dc.b '                                        ' ;7
  1773.  dc.b '                                        ' ;9
  1774.  dc.b '                                        ' ;0
  1775.  dc.b '                                        ' ;1
  1776.  
  1777.  
  1778.  
  1779. SLAVEPLAYERMENU_OPTS:
  1780.  dc.w 12,12,16,1
  1781.  dc.w 15,14,10,1
  1782.  dc.w 12,16,16,1
  1783.  dc.w -1
  1784.  
  1785.  
  1786. PLAYER_OPTS:
  1787. ;      0123456789012345678901234567890123456789
  1788.  dc.b '                 1 PLAYER               '
  1789.  dc.b '             2  PLAYER MASTER           '
  1790.  dc.b '              2 PLAYER SLAVE            '
  1791.  
  1792. LEVEL_OPTS:
  1793. ;      0123456789012345678901234567890123456789
  1794.  dc.b '      LEVEL  1 :          THE GATE      '
  1795.  dc.b '      LEVEL  2 :       STORAGE BAY      '
  1796.  dc.b '      LEVEL  3 :     SEWER NETWORK      '
  1797.  dc.b '      LEVEL  4 :     THE COURTYARD      '
  1798.  dc.b '      LEVEL  5 :      SYSTEM PURGE      '
  1799.  dc.b '      LEVEL  6 :         THE MINES      '
  1800.  dc.b '      LEVEL  7 :       THE FURNACE      '
  1801.  dc.b '      LEVEL  8 :  TEST ARENA GAMMA      '
  1802.  dc.b '      LEVEL  9 :      SURFACE ZONE      '
  1803.  dc.b '      LEVEL 10 :     TRAINING AREA      '
  1804.  dc.b '      LEVEL 11 :       ADMIN BLOCK      '
  1805.  dc.b '      LEVEL 12 :           THE PIT      '
  1806.  dc.b '      LEVEL 13 :            STRATA      '
  1807.  dc.b '      LEVEL 14 :      REACTOR CORE      '
  1808.  dc.b '      LEVEL 15 :     COOLING TOWER      '
  1809.  dc.b '      LEVEL 16 :    COMMAND CENTRE      '
  1810.  
  1811. CONTROL_TXT:
  1812. ;      0123456789012345678901234567890123456789
  1813.  dc.b '                                        ' ;0
  1814.  dc.b '                                        ' ;1
  1815.  dc.b '                                        ' ;2
  1816.  dc.b '                                        ' ;3
  1817.  dc.b '            DEFINE  CONTROLS            ' ;4
  1818.  dc.b '                                        ' ;5
  1819. KEY_LINES:
  1820.  dc.b '     TURN LEFT                  LCK     ' ;6
  1821.  dc.b '     TURN RIGHT                 RCK     ' ;7
  1822.  dc.b '     FORWARDS                   UCK     ' ;8
  1823.  dc.b '     BACKWARDS                  DCK     ' ;9
  1824.  dc.b '     FIRE                       RAL     ' ;0
  1825.  dc.b '     OPERATE DOOR/LIFT/SWITCH   SPC     ' ;1
  1826.  dc.b '     RUN                        RSH     ' ;2
  1827.  dc.b '     FORCE SIDESTEP             RAM     ' ;3
  1828.  dc.b '     SIDESTEP LEFT               .      ' ;4
  1829.  dc.b '     SIDESTEP RIGHT              /      ' ;5
  1830.  dc.b '     DUCK                        D      ' ;6
  1831.  dc.b '     LOOK BEHIND                 L      ' ;7
  1832.  dc.b '                                        ' ;8
  1833.  dc.b '             OTHER CONTROLS             ' ;9
  1834.  dc.b '                                        ' ;0
  1835.  dc.b ' PULSE RIFLE      1  PAUSE            P ' ;1
  1836.  dc.b ' SHOTGUN          2  QUIT           ESC ' ;2
  1837.  dc.b ' PLASMA GUN       3  MOUSE CONTROL    M ' ;3
  1838.  dc.b ' GRENADE LAUNCHER 4  JOYSTICK CONTROL J ' ;4
  1839.  dc.b ' ROCKET LAUNCHER  5  KEYBOARD CONTROL K ' ;5
  1840.  dc.b '                                        ' ;6
  1841.  dc.b '               MAIN  MENU               ' ;7
  1842.  dc.b '                                        ' ;8
  1843.  dc.b '                                        ' ;9
  1844.  dc.b '                                        ' ;0
  1845.  dc.b '                                        ' ;1
  1846.  
  1847. CONTROL_OPTS:
  1848.  dc.w 5,6,30,1
  1849.  dc.w 5,7,30,1
  1850.  dc.w 5,8,30,1
  1851.  dc.w 5,9,30,1
  1852.  dc.w 5,10,30,1
  1853.  dc.w 5,11,30,1
  1854.  dc.w 5,12,30,1
  1855.  dc.w 5,13,30,1
  1856.  dc.w 5,14,30,1
  1857.  dc.w 5,15,30,1
  1858.  dc.w 5,16,30,1
  1859.  dc.w 5,17,30,1
  1860.  dc.w 15,27,10,1
  1861.  dc.w -1
  1862.  
  1863. PLOPT: dc.w 0
  1864.  
  1865. INSTRUCTIONS_TXT:
  1866. ;      0123456789012345678901234567890123456789
  1867.  dc.b 'Main controls:                          ' ;1
  1868.  dc.b '                                        ' ;2
  1869.  dc.b 'Curs Keys = Forward / Backward          ' ;3
  1870.  dc.b '            Turn left / right           ' ;4
  1871.  dc.b '          Right Alt = Fire              ' ;5
  1872.  dc.b '        Right Shift = Run               ' ;6
  1873.  dc.b '                  > = Slide Left        ' ;7
  1874.  dc.b '                  ? = Slide Right       ' ;8
  1875.  dc.b '              SPACE = Operate Door/Lift ' ;9
  1876.  dc.b '                  D = Duck              ' ;0
  1877.  dc.b '                  J = Joystick Control  ' ;1
  1878.  dc.b '                  K = Keyboard Control  ' ;2
  1879.  dc.b '                                        ' ;3
  1880.  dc.b '              1,2,3 = Select weapon     ' ;4
  1881.  dc.b '              ENTER = Toggle screen size' ;5
  1882.  dc.b '                ESC = Quit              ' ;6
  1883.  dc.b '                                        ' ;7
  1884.  dc.b '                                        ' ;8
  1885.  dc.b 'The one player game has no objective and' ;9
  1886.  dc.b 'the only way to finish is to die or quit' ;0
  1887.  dc.b '                                        ' ;1
  1888.  dc.b 'The two-player game is supposed to be a ' ;2
  1889.  dc.b 'fight to the death but will probably be ' ;3
  1890.  dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
  1891.  dc.b 'then-blow-ourselves-up type game.       ' ;5
  1892.  dc.b '                                        ' ;6
  1893.  dc.b 'LOOK OUT FOR TELEPORTERS: They usually  ' ;7
  1894.  dc.b 'have glowing red walls and overhead     ' ;8
  1895.  dc.b 'lights. Useful for getting behind your  ' ;9
  1896.  dc.b ' opponent!                              ' ;0
  1897.  dc.b '  Just a taster of what is to come....  ' ;1
  1898.  dc.b '                                        ' ;0
  1899.  
  1900. INSTRUCTIONS_OPTS:
  1901.  dc.w 0,0,0,1
  1902.  dc.w -1
  1903.  
  1904. CREDITMENU_TXT:
  1905.  
  1906. ;      0123456789012345678901234567890123456789
  1907.  dc.b '    Programming, Game Code, Graphics    ' ;0
  1908.  dc.b '         Game Design and Manual         ' ;1
  1909.  dc.b '            Andrew Clitheroe            ' ;2
  1910.  dc.b '                                        ' ;3
  1911.  dc.b '             Alien Graphics             ' ;4
  1912.  dc.b '             Michael  Green             ' ;5
  1913.  dc.b '                                        ' ;6
  1914.  dc.b '           3D Object Designer           ' ;7
  1915.  dc.b '            Charles Blessing            ' ;8
  1916.  dc.b '                                        ' ;9
  1917.  dc.b '              Level Design              ' ;0
  1918.  dc.b 'Michael Green  Ben Chanter   Jackie Lang' ;1
  1919.  dc.b '     Kai Barrett Charles Blessing       ' ;2
  1920.  dc.b '                                        ' ;3
  1921.  dc.b '           Creative  Director           ' ;4
  1922.  dc.b '              Martyn Brown              ' ;5
  1923.  dc.b '                                        ' ;6
  1924.  dc.b '       Project Manager and Manual       ' ;7
  1925.  dc.b "            Martin O'Donnell            " ;8
  1926.  dc.b '                                        ' ;9
  1927.  dc.b '              Music + SFX               ' ;0
  1928.  dc.b '              Bjorn Lynne               ' ;1
  1929.  dc.b '                                        ' ;2
  1930.  dc.b '      Cover Illustration and Logo       ' ;3
  1931.  dc.b '             Kevin Jenkins              ' ;4
  1932.  dc.b '                                        ' ;5
  1933.  dc.b '      Packaging and Manual Design       ' ;6
  1934.  dc.b '               Paul Sharp               ' ;7
  1935.  dc.b '                                        ' ;8
  1936.  dc.b '             QA and Playtest            ' ;9
  1937.  dc.b '           Phil and The Wolves          ' ;0
  1938.  dc.b '                                        ' ;1
  1939.  
  1940.  dc.b '    Serial Link and 3D Object Editor:   ' ;4
  1941.  dc.b '                   by                   ' ;5
  1942.  dc.b '            Charles Blessing            ' ;6
  1943.  dc.b '                                        ' ;7
  1944.  dc.b '                Graphics:               ' ;8
  1945.  dc.b '                   by                   ' ;9
  1946.  dc.b '              Mike  Oakley              ' ;0
  1947.  dc.b '                                        ' ;1
  1948.  dc.b '             Title  Picture             ' ;2
  1949.  dc.b '                   by                   ' ;3
  1950.  dc.b '               Mike Green               ' ;4
  1951.  dc.b '                                        ' ;5
  1952.  dc.b ' Inspiration, incentive, moral support, ' ;6
  1953.  dc.b '     level design and plenty of tea     ' ;7
  1954.  dc.b '         generously supplied by         ' ;8
  1955.  dc.b '                                        ' ;9
  1956.  dc.b '              Jackie  Lang              ' ;0
  1957.  dc.b '                                        ' ;1
  1958.  dc.b '    Music for the last demo composed    ' ;2
  1959.  dc.b '       by the inexpressibly evil:       ' ;3
  1960.  dc.b '                                        ' ;8
  1961.  dc.b '            *BAD* BEN CHANTER           ' ;9
  1962.  dc.b '                                        ' ;0
  1963.  dc.b '    Sadly no room for music this time   ' ;1
  1964.  dc.b '                                        ' ;7
  1965.  dc.b '                                        ' ;7
  1966.  
  1967. CREDITMENU_OPTS:
  1968.  dc.w 0,0,1,1
  1969.  dc.w -1
  1970.  
  1971.  
  1972. ;      0123456789012345678901234567890123456789
  1973.  dc.b '                                        ' ;0
  1974.  dc.b '                                        ' ;1
  1975.  dc.b '                                        ' ;2
  1976.  dc.b '                                        ' ;3
  1977.  dc.b '                                        ' ;4
  1978.  dc.b '                                        ' ;5
  1979.  dc.b '                                        ' ;6
  1980.  dc.b '                                        ' ;7
  1981.  dc.b '                                        ' ;8
  1982.  dc.b '                                        ' ;9
  1983.  dc.b '                                        ' ;0
  1984.  dc.b '                                        ' ;1
  1985.  dc.b '                                        ' ;2
  1986.  dc.b '                                        ' ;3
  1987.  dc.b '                                        ' ;4
  1988.  dc.b '                                        ' ;5
  1989.  dc.b '                                        ' ;6
  1990.  dc.b '                                        ' ;7
  1991.  dc.b '                                        ' ;8
  1992.  dc.b '                                        ' ;9
  1993.  dc.b '                                        ' ;0
  1994.  dc.b '                                        ' ;1
  1995.  dc.b '                                        ' ;2
  1996.  dc.b '                                        ' ;3
  1997.  dc.b '                                        ' ;4
  1998.  dc.b '                                        ' ;5
  1999.  dc.b '                                        ' ;6
  2000.  dc.b '                                        ' ;7
  2001.  dc.b '                                        ' ;8
  2002.  dc.b '                                        ' ;9
  2003.  dc.b '                                        ' ;0
  2004.  dc.b '                                        ' ;1
  2005.  
  2006.  
  2007. ********************************************************
  2008.  
  2009. PUTIN32:
  2010.  move.w #31,d2
  2011. p32loop:
  2012.  moveq #0,d5
  2013.  move.l (a0)+,d3
  2014.  move.w d3,d4
  2015.  swap d3
  2016.  move.b d4,d5
  2017.  lsr.w #8,d4
  2018.  
  2019.  muls d0,d3
  2020.  muls d0,d4
  2021.  muls d0,d5
  2022.  lsr.l #8,d3
  2023.  lsr.l #8,d4
  2024.  lsr.l #8,d5
  2025.  move.w d3,d6
  2026.  swap d3
  2027.  move.w d6,d3
  2028.  move.w d4,d6
  2029.  swap d4
  2030.  move.w d6,d4
  2031.  move.w d5,d6
  2032.  swap d5
  2033.  move.w d6,d5
  2034.  and.w #%11110000,d3
  2035.  and.w #%11110000,d4
  2036.  and.w #%11110000,d5
  2037.  lsl.w #4,d3
  2038.  add.w d4,d3
  2039.  lsr.w #4,d5
  2040.  add.w d5,d3
  2041.  move.w d3,2(a1)
  2042.  swap d3
  2043.  swap d4
  2044.  swap d5
  2045.  and.w #%1111,d3
  2046.  and.w #%1111,d4
  2047.  and.w #%1111,d5
  2048.  lsl.w #8,d3
  2049.  lsl.w #4,d4
  2050.  add.w d4,d3
  2051.  add.w d5,d3
  2052.  move.w d3,2+(132*4)(a1)
  2053.  addq #4,a1
  2054.  dbra d2,p32loop
  2055.  
  2056.  
  2057.  rts
  2058.  
  2059. **************************************
  2060.  
  2061. FADEAMOUNT: dc.w 0
  2062. FADEVAL: dc.w 0
  2063.  
  2064. FADEUPTITLE:
  2065.  
  2066.  move.w FADEVAL,d0
  2067.  move.w FADEAMOUNT,d1
  2068. fadeuploop:
  2069.  
  2070.  move.l #TITLEPAL,a0
  2071.  move.l #TITLEPALCOP,a1
  2072.  
  2073. wvb:
  2074.  btst #5,$dff000+intreqrl
  2075.  beq.s wvb
  2076.  move.w #$20,$dff000+intreq 
  2077.  
  2078.  bsr PUTIN32
  2079.  add.w #4,a1
  2080.  bsr PUTIN32
  2081.  add.w #4,a1
  2082.  bsr PUTIN32
  2083.  add.w #4,a1
  2084.  bsr PUTIN32
  2085.  
  2086.  addq.w #4,d0
  2087.  dbra d1,fadeuploop
  2088.  
  2089.  subq #4,d0
  2090.  move.w d0,FADEVAL
  2091.  
  2092.  rts
  2093.  
  2094. CLEARTITLEPAL:
  2095.  PRSDP
  2096.  move.l #TITLEPALCOP,a0
  2097.  move.w #7,d1
  2098. clrpal:
  2099.  move.w #31,d0
  2100. clr32
  2101.  move.w #0,2(a0)
  2102.  addq #4,a0
  2103.  dbra d0,clr32
  2104.  addq #4,a0
  2105.  dbra d1,clrpal
  2106.  PRSDQ
  2107.  rts
  2108.  
  2109. FADEDOWNTITLE:
  2110.  
  2111.  move.w FADEVAL,d0
  2112.  move.w FADEAMOUNT,d1
  2113. fadedownloop:
  2114.  
  2115.  move.l #TITLEPAL,a0
  2116.  move.l #TITLEPALCOP,a1
  2117.  
  2118. .wvb:
  2119.  btst #5,$dff000+intreqrl
  2120.  beq.s .wvb
  2121.  move.w #$20,$dff000+intreq 
  2122.  
  2123.  bsr PUTIN32
  2124.  add.w #4,a1
  2125.  bsr PUTIN32
  2126.  add.w #4,a1
  2127.  bsr PUTIN32
  2128.  add.w #4,a1
  2129.  bsr PUTIN32
  2130.  
  2131.  subq.w #4,d0
  2132.  dbra d1,fadedownloop
  2133.  
  2134.  addq #4,d0
  2135.  move.w d0,FADEVAL
  2136.  
  2137.  rts
  2138.  
  2139. LOADTITLESCRN2:
  2140.  
  2141.  move.l #TITLESCRNNAME2,d1
  2142.  move.l #1005,d2
  2143.  move.l doslib,a6
  2144.  jsr -30(a6)
  2145.  move.l d0,handle
  2146.  move.l d0,d1
  2147.  move.l doslib,a6
  2148.  move.l TITLESCRNADDR,d2
  2149.  move.l #10240*7,d3
  2150.  jsr -42(a6)
  2151.  move.l doslib,a6
  2152.  move.l handle,d1
  2153.  jsr -36(a6)
  2154.  
  2155.  rts
  2156.  
  2157.  
  2158. GETTITLEMEM:
  2159.  move.l #2,d1
  2160.  move.l #10240*7,d0
  2161.  move.l 4.w,a6
  2162.  jsr -198(a6)
  2163.  move.l d0,TITLESCRNADDR
  2164.  
  2165.  move.l #$dff000-$2cdfe4,a4
  2166.  
  2167.  move.l #2,d1
  2168.  move.l #258*16*5,d0
  2169.  move.l 4.w,a6
  2170.  jsr -198(a6)
  2171.  move.l d0,OPTSPRADDR
  2172.  
  2173.  rts
  2174.  
  2175. PROTSETUP:
  2176.  incbin "ab3:includes/protsetupenc"
  2177.  
  2178. ; Need to: Decode protection calling
  2179. ; routine
  2180. ; use null values to call it and erase
  2181. ; it from memory
  2182. ; erase this routine and return.
  2183.  
  2184. ; include "ab3:source/protsetup"
  2185.  
  2186.  
  2187. RELEASETITLEMEM:
  2188.  move.l TITLESCRNADDR,d1
  2189.  move.l d1,a1
  2190.  move.l #10240*7,d0
  2191.  move.l 4.w,a6
  2192.  jsr -210(a6)
  2193.  
  2194.  move.l OPTSPRADDR,d1
  2195.  move.l d1,a1
  2196.  move.l #258*80,d0
  2197.  move.l 4.w,a6
  2198.  jsr -210(a6)
  2199.  rts
  2200.  
  2201.  
  2202. PROTCALLENC:
  2203.  incbin "ab3:source/protcallenc.bin
  2204.  
  2205. ; one pass, all instructions executed.
  2206. ; must call protection routine,store
  2207. ; value somewhere, call ask routine,
  2208. ; compare returned value, if correct
  2209. ; set up all values, then return.
  2210.  
  2211. ; include "ab3:source/protcallenc"
  2212.  
  2213. ENDPROT:
  2214.  
  2215. LOADTITLESCRN:
  2216.  
  2217.  move.l #TITLESCRNNAME,d1
  2218.  move.l #1005,d2
  2219.  move.l doslib,a6
  2220.  jsr -30(a6)
  2221.  move.l d0,handle
  2222.  move.l d0,d1
  2223.  move.l doslib,a6
  2224.  move.l TITLESCRNADDR,d2
  2225.  move.l #10240*7,d3
  2226.  jsr -42(a6)
  2227.  move.l doslib,a6
  2228.  move.l handle,d1
  2229.  jsr -36(a6)
  2230.  
  2231.  rts
  2232.  
  2233. RVAL2: dc.w 0
  2234.  
  2235. SETUPTITLESCRN:
  2236.  
  2237.  PRSDR
  2238.  move.l #OPTCOP,a0
  2239.  move.l #rain,a1
  2240.  move.w #255,d0
  2241. putinrain:
  2242.  move.w (a1)+,d1
  2243.  move.w d1,6(a0)
  2244.  move.w d1,6+4(a0)
  2245.  move.w d1,6+8(a0)
  2246.  move.w d1,6+12(a0)
  2247.  add.w #4*14,a0
  2248.  
  2249.  dbra d0,putinrain
  2250.  
  2251. ; Put addr into copper.
  2252.  move.l OPTSPRADDR,d0
  2253.  move.w d0,tsp0l
  2254.  swap d0
  2255.  move.w d0,tsp0h
  2256.  swap d0
  2257.  add.l #258*16,d0
  2258.  move.w d0,tsp1l
  2259.  swap d0
  2260.  move.w d0,tsp1h
  2261.  swap d0
  2262.  add.l #258*16,d0
  2263.  move.w d0,tsp2l
  2264.  swap d0
  2265.  move.w d0,tsp2h
  2266.  swap d0
  2267.  add.l #258*16,d0
  2268.  move.w d0,tsp3l
  2269.  swap d0
  2270.  move.w d0,tsp3h
  2271.  swap d0
  2272.  add.l #258*16,d0
  2273.  move.w d0,tsp4l
  2274.  swap d0
  2275.  move.w d0,tsp4h
  2276.  
  2277.  move.l #nullspr,d0
  2278.  move.w d0,tsp5l
  2279.  move.w d0,tsp6l
  2280.  move.w d0,tsp7l
  2281.  swap d0
  2282.  move.w d0,tsp5h
  2283.  move.w d0,tsp6h
  2284.  move.w d0,tsp7h 
  2285.  
  2286.  move.l TITLESCRNADDR,d0
  2287.  move.w d0,ts1l
  2288.  swap d0
  2289.  move.w d0,ts1h
  2290.  swap d0
  2291.  add.l #10240,d0
  2292.  move.w d0,ts2l
  2293.  swap d0
  2294.  move.w d0,ts2h
  2295.  swap d0
  2296.  add.l #10240,d0
  2297.  move.w d0,ts3l
  2298.  swap d0
  2299.  move.w d0,ts3h
  2300.  swap d0
  2301.  add.l #10240,d0
  2302.  move.w d0,ts4l
  2303.  swap d0
  2304.  move.w d0,ts4h
  2305.  swap d0
  2306.  add.l #10240,d0
  2307.  move.w d0,ts5l
  2308.  swap d0
  2309.  move.w d0,ts5h
  2310.  swap d0
  2311.  add.l #10240,d0
  2312.  move.w d0,ts6l
  2313.  swap d0
  2314.  move.w d0,ts6h
  2315.  swap d0
  2316.  add.l #10240,d0
  2317.  move.w d0,ts7l
  2318.  swap d0
  2319.  move.w d0,ts7h
  2320.  rts 
  2321.  
  2322. RVAL1: dc.w 0
  2323.  
  2324. DummyAdds:
  2325.  dc.l dummy-78935450
  2326.  dc.l dummy-78935450
  2327.  dc.l dummy-78935450
  2328.  dc.l dummy-78935450
  2329.  dc.l dummy-78935450
  2330.  dc.l dummy-78935450
  2331.  dc.l dummy-78935450
  2332.  dc.l dummy-78935450
  2333.  dc.l dummy-78935450
  2334.  dc.l dummy-78935450
  2335.  
  2336. dummycall
  2337.  dc.w $4e75-123
  2338.  
  2339. protspace: ds.l 200
  2340.  
  2341.  include "ab3:source/LEVEL_BLURB"
  2342.  
  2343. font:
  2344.  incbin "OptFont"
  2345.  
  2346. rain: incbin "optcop"
  2347.